package blatt5;

import java.util.HashMap;
import java.util.Map;

public class Aufgabe2 {
	
	@SuppressWarnings("serial")
	private static Map<String, int[]> waehrungen = new HashMap<String, int[]>() {{
		put("Euro", new int[] {200,100,50,20,10,5,2,1});
		put("Alternative", new int[] {200,100,50,20,10,5,4,2,1});
	}};
	
	public static void main(String[] args) {
		
		int wechselgeld = 0;
		int[] waehrung = {};
		
		try {
			if (args.length >= 2) {
				String waehrungTyp = args[0];
				waehrung = waehrungen.get(waehrungTyp);				// Array zur übergebenen Währung abrufen
				wechselgeld = Integer.parseInt(args [1]);	// Absoluten Wert zur Eingabe
				
				assert wechselgeld > 0 : "Ups...Strange Error";
				
				if (wechselgeld <= 0) {
					throw new Exception();
				}
			} else {
				throw new Exception();
			}
		} catch (Exception ex) {
			help_terminate();
		}
		
		int[] rueckgabe = change(wechselgeld, waehrung);			
		String[] _waehrung = dap.util.toStringArray(waehrung);		// Aufbau der Auszugebenden Keys
		dap.util.printArray(rueckgabe, _waehrung, false);			// Ausgabe des Arrays mit Münzen als Keys
		
	}
	
	public static int[] change(int b, int[] w) {
		int[] rueckgabe = new int[w.length];
		for(int i = 0; i < w.length && b > 0; i++) 
			if (b >= w[i]) {		
				rueckgabe[i] = b/w[i];	
				b -= rueckgabe[i]*w[i];		// Invariante: b wird immer kleiner
			}
		return rueckgabe;
	}
	
	public static void help_terminate() {
		System.out.println();
		System.out.println("Das Programm ist mit zwei Parametern aufrurufen:");
		System.out.println("Parameter 1: String {Euro, Alternative}");
		System.out.println("Parameter 2: int Wechselgeld");
		System.out.println("Beispiel: java Aufgabe2 Euro 512.74");
		System.out.println();
		System.exit(1);
	}

}
